# 斐波那契数列

"""递归求斐波那契数列第n项"""
def fib1(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib1(n - 1) + fib1(n - 2)
print(fib1(7))

"""迭代求斐波那契数列第n项"""
def fib2(n):
    f1 = f2 = 1
    for i in range(3,n+1):
        f1, f2 = f2, f1 + f2
    return f2
print(fib2(7))

"""数组迭代求斐波那契数列第n项"""
def fib3(n):
    f = [1, 1]
    for i in range(3,n+1):
        f.append(f[-1]+f[-2])   # -1代表最后一项即前一项，-2代表前前一项
    return f[n-1]   # 因为从0开始算而不是1，所以要-1
print(fib3(7))

"""求前n项斐波那契数列"""
def fib4(n):
    f = [1, 1]
    for i in range(3,n+1):
        f.append(f[-1]+f[-2]) # -1代表最后一项即前一项，-2代表前前一项
    return f[:n]    # 等价于f[0:n],0可以省略
    # return ",".join(str(i) for i in f[:n]) # 不输出两侧的中括号
print(fib4(7))